home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / eb.lha / ebdir / EB.e < prev    next >
Text File  |  1994-09-27  |  11KB  |  327 lines

  1. /* ElectriBones - v2.7 */
  2.  
  3. MODULE 'intuition/intuition','dos/dos','other/stderr','other/stayrandom'
  4.  
  5. ENUM ER_NONE,ER_WINDOW
  6.  
  7. CONST MAXGADGETS=GADGETSIZE*19,NX=28,NY=15,DX=84,DY=80
  8.  
  9. DEF wptr:PTR TO window,next,buf[MAXGADGETS]:ARRAY,cdie,cnum,ret
  10.  
  11. PROC main()
  12.         DEF version,class,object:PTR TO gadget,gad
  13.         version:='$VER: ElectriBones v2.7 (9.18.94)'
  14.         err_New('EB')
  15.         stayrandom()
  16.         IF arg[]<>0 THEN cliOutput()
  17.         initGadgets()
  18.  
  19.         wptr:=OpenW(160,35,158,151,
  20.             IDCMP_CLOSEWINDOW OR IDCMP_GADGETUP,
  21.             WFLG_CLOSEGADGET OR WFLG_DEPTHGADGET OR
  22.             WFLG_DRAGBAR OR WFLG_SMART_REFRESH OR WFLG_ACTIVATE,
  23.             'ElectriBones',NIL,1,buf)
  24.  
  25.         IF wptr=NIL THEN easyExit(ER_WINDOW)
  26.  
  27.         cnum:=3
  28.         cdie:=6
  29.         ret:=0
  30.         drawLines()
  31.         highlight(cnum,cdie)
  32.  
  33.         REPEAT
  34.                 class:=WaitIMessage(wptr)
  35.                 IF class=IDCMP_GADGETUP
  36.                         object:=MsgIaddr()
  37.                         gad:=object.userdata
  38.                         IF gad<15 THEN cnum:=gad
  39.                         IF (gad>15) AND (gad<>999) THEN cdie:=(gad/10)
  40.                         IF gad=999
  41.                                 ret:=doRandom(cnum,cdie)
  42.                                 convert(ret)
  43.                         ENDIF
  44.                         highlight(cnum,cdie)
  45.                 ENDIF
  46.         UNTIL class=IDCMP_CLOSEWINDOW
  47.         easyExit(ER_NONE)
  48. ENDPROC
  49.  
  50. /* Functions */
  51.  
  52. PROC highlight(num,die)
  53.         DEF x,y,xx,yy,val,ref[7]:ARRAY OF LONG
  54.         ref:=[2,4,6,8,10,12,20,100]
  55.         SetBPen(wptr.rport,0)
  56.         FOR y:=0 TO 4
  57.                 FOR x:=0 TO 1
  58.                         SetAPen(wptr.rport,1)
  59.                         val:=(x+1+(y*2))
  60.                         IF num=val THEN SetAPen(wptr.rport,2)
  61.                         xx:=NX+(x*24)+8
  62.                         yy:=NY+(y*12)+8
  63.                         IF val=10 THEN xx:=xx-4
  64.                         TextF(xx,yy,'\d',val)
  65.                 ENDFOR
  66.         ENDFOR
  67.         FOR y:=0 TO 3
  68.                 FOR x:=0 TO 1
  69.                         SetAPen(wptr.rport,1)
  70.                         val:=(x+1+(y*2))-1
  71.                         IF die=ref[val] THEN SetAPen(wptr.rport,2)
  72.                         xx:=DX+(x*24)+8
  73.                         yy:=NY+(y*12)+8
  74.                         IF ref[val]>9 THEN xx:=xx-4
  75.                         IF ref[val]=100
  76.                                 TextF(xx+4,yy,'%')
  77.                         ELSE
  78.                                 TextF(xx,yy,'\d',ref[val])
  79.                         ENDIF
  80.                 ENDFOR
  81.         ENDFOR
  82. ENDPROC
  83.  
  84. PROC convert(num)
  85.         DEF huns,tens,ones,leds[9]:ARRAY OF LONG
  86.         lightLeds(0,0)
  87.         lightLeds(0,1)
  88.         lightLeds(0,2)
  89.         leds:=[%1110111,%0100100,%1011101,%1101101,%0101110,%1101011,
  90.         %1111011,%0100101,%1111111,%1101111]
  91.         huns:=num/100
  92.         tens:=(num-(huns*100))/10
  93.         ones:=num-(huns*100)-(tens*10)
  94.         IF num=1000
  95.                 ones:=0
  96.                 tens:=0
  97.                 huns:=0
  98.         ENDIF
  99.         IF num<100
  100.                 lightLeds(0,0)
  101.         ELSE
  102.                 lightLeds(leds[huns],0)
  103.         ENDIF
  104.         IF num<10
  105.                 lightLeds(0,1)
  106.         ELSE
  107.                 lightLeds(leds[tens],1)
  108.         ENDIF
  109.         lightLeds(leds[ones],2)
  110. ENDPROC
  111.  
  112. PROC doRandom(num,die)
  113.         DEF loop,tempVar,total
  114.         total:=0
  115.         FOR loop:=1 TO num STEP 1
  116.                 tempVar:=Rnd(die)+1
  117.                 total:=total+tempVar
  118.         ENDFOR
  119. ENDPROC total
  120.  
  121. PROC initGadgets()
  122.         next:=Gadget(buf,NIL,1,0,NX,NY,24,'')
  123.         next:=Gadget(next,buf,2,0,NX+24,NY,24,'')
  124.         next:=Gadget(next,buf,3,0,NX,NY+12,24,'')
  125.         next:=Gadget(next,buf,4,0,NX+24,NY+12,24,'')
  126.         next:=Gadget(next,buf,5,0,NX,NY+24,24,'')
  127.         next:=Gadget(next,buf,6,0,NX+24,NY+24,24,'')
  128.         next:=Gadget(next,buf,7,0,NX,NY+36,24,'')
  129.         next:=Gadget(next,buf,8,0,NX+24,NY+36,24,'')
  130.         next:=Gadget(next,buf,9,0,NX,NY+48,24,'')
  131.         next:=Gadget(next,buf,10,0,NX+24,NY+48,24,'')
  132.  
  133.         next:=Gadget(next,buf,20,0,DX,NY,24,'')
  134.         next:=Gadget(next,buf,40,0,DX+24,NY,24,'')
  135.         next:=Gadget(next,buf,60,0,DX,NY+12,24,'')
  136.         next:=Gadget(next,buf,80,0,DX+24,NY+12,24,'')
  137.         next:=Gadget(next,buf,100,0,DX,NY+24,24,'')
  138.         next:=Gadget(next,buf,120,0,DX+24,NY+24,24,'')
  139.         next:=Gadget(next,buf,200,0,DX,NY+36,24,'')
  140.         next:=Gadget(next,buf,1000,0,DX+24,NY+36,24,'')
  141.         next:=Gadget(next,buf,999,0,DX,NY+48,48,'Roll')
  142. ENDPROC
  143.  
  144. PROC lightLeds(leds,led)
  145.         DEF xx,colr
  146.         xx:=17+(43*led)
  147.         colr:=3
  148.         IF (leds AND %1)=%1 THEN colr:=2
  149.         Line(xx+02,DY+00,xx+37,DY+00,colr)
  150.         Line(xx+04,DY+01,xx+35,DY+01,colr)
  151.         Line(xx+06,DY+02,xx+33,DY+02,colr)
  152.         Line(xx+07,DY+03,xx+32,DY+03,colr)
  153.         colr:=3
  154.         IF (leds AND %10)=%10 THEN colr:=2
  155.         Line(xx+00,DY+01,xx+00,DY+21,colr)
  156.         Line(xx+01,DY+01,xx+01,DY+21,colr)
  157.         Line(xx+02,DY+02,xx+02,DY+20,colr)
  158.         Line(xx+03,DY+02,xx+03,DY+20,colr)
  159.         Line(xx+04,DY+03,xx+04,DY+19,colr)
  160.         Line(xx+05,DY+03,xx+05,DY+19,colr)
  161.         colr:=3
  162.         IF (leds AND %100)=%100 THEN colr:=2
  163.         Line(xx+39,DY+01,xx+39,DY+21,colr)
  164.         Line(xx+38,DY+01,xx+38,DY+21,colr)
  165.         Line(xx+37,DY+02,xx+37,DY+20,colr)
  166.         Line(xx+36,DY+02,xx+36,DY+20,colr)
  167.         Line(xx+35,DY+03,xx+35,DY+19,colr)
  168.         Line(xx+34,DY+03,xx+34,DY+19,colr)
  169.         colr:=3
  170.         IF (leds AND %1000)=%1000 THEN colr:=2
  171.         Line(xx+06,DY+20,xx+33,DY+20,colr)
  172.         Line(xx+04,DY+21,xx+35,DY+21,colr)
  173.         Line(xx+02,DY+22,xx+37,DY+22,colr)
  174.         Line(xx+02,DY+23,xx+37,DY+23,colr)
  175.         Line(xx+04,DY+24,xx+35,DY+24,colr)
  176.         Line(xx+06,DY+25,xx+33,DY+25,colr)
  177.         colr:=3
  178.         IF (leds AND %10000)=%10000 THEN colr:=2
  179.         Line(xx+00,DY+24,xx+00,DY+44,colr)
  180.         Line(xx+01,DY+24,xx+01,DY+44,colr)
  181.         Line(xx+02,DY+25,xx+02,DY+43,colr)
  182.         Line(xx+03,DY+25,xx+03,DY+43,colr)
  183.         Line(xx+04,DY+26,xx+04,DY+42,colr)
  184.         Line(xx+05,DY+26,xx+05,DY+42,colr)
  185.         colr:=3
  186.         IF (leds AND %100000)=%100000 THEN colr:=2
  187.         Line(xx+39,DY+24,xx+39,DY+44,colr)
  188.         Line(xx+38,DY+24,xx+38,DY+44,colr)
  189.         Line(xx+37,DY+25,xx+37,DY+43,colr)
  190.         Line(xx+36,DY+25,xx+36,DY+43,colr)
  191.         Line(xx+35,DY+26,xx+35,DY+42,colr)
  192.         Line(xx+34,DY+26,xx+34,DY+42,colr)
  193.         colr:=3
  194.         IF (leds AND %1000000)=%1000000 THEN colr:=2
  195.         Line(xx+07,DY+42,xx+32,DY+42,colr)
  196.         Line(xx+06,DY+43,xx+33,DY+43,colr)
  197.         Line(xx+04,DY+44,xx+35,DY+44,colr)
  198.         Line(xx+02,DY+45,xx+37,DY+45,colr)
  199. ENDPROC
  200.  
  201. PROC drawLines()
  202.         Box(6,12,152,NY-1,3)
  203.         Box(6,NY,NX-1,NY+59,3)
  204.         Box(NX+48,NY,DX-1,NY+59,3)
  205.         Box(DX+48,NY,152,NY+59,3)
  206.         Box(6,NY+60,152,147,3)
  207.  
  208.         RefreshGadgets(buf,wptr,NIL)
  209.  
  210.         Line(NX,NY,NX+22,NY,2)
  211.         Line(NX,NY,NX,NY+10,2)
  212.         Line(NX+24,NY,NX+24+22,NY,2)
  213.         Line(NX+24,NY,NX+24,NY+10,2)
  214.         Line(NX,NY+12,NX+22,NY+12,2)
  215.         Line(NX,NY+12,NX,NY+10+12,2)
  216.         Line(NX+24,NY+12,NX+24+22,NY+12,2)
  217.         Line(NX+24,NY+12,NX+24,NY+10+12,2)
  218.         Line(NX,NY+24,NX+22,NY+24,2)
  219.         Line(NX,NY+24,NX,NY+10+24,2)
  220.         Line(NX+24,NY+24,NX+24+22,NY+24,2)
  221.         Line(NX+24,NY+24,NX+24,NY+10+24,2)
  222.         Line(NX,NY+36,NX+22,NY+36,2)
  223.         Line(NX,NY+36,NX,NY+10+36,2)
  224.         Line(NX+24,NY+36,NX+24+22,NY+36,2)
  225.         Line(NX+24,NY+36,NX+24,NY+10+36,2)
  226.         Line(NX,NY+48,NX+22,NY+48,2)
  227.         Line(NX,NY+48,NX,NY+10+48,2)
  228.         Line(NX+24,NY+48,NX+24+22,NY+48,2)
  229.         Line(NX+24,NY+48,NX+24,NY+10+48,2)
  230.  
  231.         Line(DX,NY,DX+22,NY,2)
  232.         Line(DX,NY,DX,NY+10,2)
  233.         Line(DX+24,NY,DX+24+22,NY,2)
  234.         Line(DX+24,NY,DX+24,NY+10,2)
  235.         Line(DX,NY+12,DX+22,NY+12,2)
  236.         Line(DX,NY+12,DX,NY+10+12,2)
  237.         Line(DX+24,NY+12,DX+24+22,NY+12,2)
  238.         Line(DX+24,NY+12,DX+24,NY+10+12,2)
  239.         Line(DX,NY+24,DX+22,NY+24,2)
  240.         Line(DX,NY+24,DX,NY+10+24,2)
  241.         Line(DX+24,NY+24,DX+24+22,NY+24,2)
  242.         Line(DX+24,NY+24,DX+24,NY+10+24,2)
  243.         Line(DX,NY+36,DX+22,NY+36,2)
  244.         Line(DX,NY+36,DX,NY+10+36,2)
  245.         Line(DX+24,NY+36,DX+24+22,NY+36,2)
  246.         Line(DX+24,NY+36,DX+24,NY+10+36,2)
  247.         Line(DX,NY+48,DX+22+24,NY+48,2)
  248.         Line(DX,NY+48,DX,NY+10+48,2)
  249.  
  250.         Box(13,NY+63,146,NY+112,0)
  251.         Box(15,NY+64,144,NY+111,1)
  252.         convert(ret)
  253.  
  254.         SetAPen(wptr.rport,1)
  255.         SetBPen(wptr.rport,0)
  256.         TextF(DX+8,NY+56,'Roll')
  257.  
  258.         SetAPen(wptr.rport,1)
  259.         SetBPen(wptr.rport,3)
  260.  
  261.         TextF(4+8,NY+8+5, 'N')
  262.         TextF(4+8,NY+16+5,'u')
  263.         TextF(4+8,NY+24+5,'m')
  264.         TextF(4+8,NY+32+5,'b')
  265.         TextF(4+8,NY+40+5,'e')
  266.         TextF(4+8,NY+48+5,'r')
  267.         TextF(DX+48+8,NY+8+6, 'D')
  268.         TextF(DX+48+8,NY+16+6,'i')
  269.         TextF(DX+48+8,NY+24+6,'c')
  270.         TextF(DX+48+8,NY+32+6,'e')
  271.  
  272.         TextF(13,NY+122,'© 1994 BlackLight')
  273.         TextF(13,NY+130,'        Software')
  274.         SetAPen(wptr.rport,0)
  275.         TextF(13,NY+130,'  v2.7')
  276. ENDPROC
  277.  
  278. PROC easyExit(error)
  279.         SELECT error
  280.                 CASE ER_NONE
  281.                         CloseW(wptr)
  282.                         err_Dispose()
  283.                         CleanUp(0)
  284.                 CASE ER_WINDOW
  285.                         err_WriteF('Error Opening Window!\n')
  286.                         err_Dispose()
  287.                         CleanUp(11)
  288.         ENDSELECT
  289. ENDPROC
  290.  
  291. PROC cliOutput()
  292.         DEF tempStr[15]:STRING,tempPtr,tempNum,num,die,ret
  293.         IF arg[]="?"
  294.                 echoUsage()
  295.                 CleanUp(0)
  296.         ENDIF
  297.         tempPtr:=2
  298.         IF arg[]="1"
  299.                 num:=1
  300.                 IF arg[1]="0"
  301.                         num:=10
  302.                         tempPtr:=3
  303.                 ENDIF
  304.         ELSE
  305.                 tempStr[]:=arg[]
  306.                 num:=Val(tempStr,NIL)
  307.         ENDIF
  308.         IF arg[tempPtr]="%"
  309.                 die:=100
  310.         ELSE
  311.                 MidStr(tempStr,arg,tempPtr,ALL)
  312.                 die:=Val(tempStr,NIL)
  313.         ENDIF
  314.         WHILE (arg[tempPtr]<>"-") AND (arg[tempPtr]<>"+") AND (arg[tempPtr]<>0) DO INC tempPtr
  315.         IF arg[tempPtr]="+" THEN INC tempPtr
  316.         MidStr(tempStr,arg,tempPtr,ALL)
  317.         tempNum:=Val(tempStr,NIL)
  318.         ret:=doRandom(num,die)
  319.         WriteF('\d\n',ret+tempNum)
  320.         CleanUp(0)
  321. ENDPROC
  322.  
  323. PROC echoUsage()
  324.         WriteF( 'ElectricBones v2.7 - © 1994 BlackLight Software\n' );
  325.         WriteF( 'Usage: EB <Number>d<Die>+/-<Add>\n' );
  326. ENDPROC
  327.